    function JsXMLHttpRequest()
    {

    }

    function GetXHR()
    {
        var httpRequest;

        if (window.XMLHttpRequest) { // Mozilla, Safari, ...
            httpRequest = new XMLHttpRequest();
            /*if (httpRequest.overrideMimeType) {
                httpRequest.overrideMimeType('text/xml');
                // See note below about this line
            }*/
        } else if (window.ActiveXObject) { // IE
            try {
                httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {
                    if (jsRequest) {
                        httpRequest = new JsXMLHttpRequest();
                    }
                }
            }
        }

        if (!httpRequest) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
        return httpRequest;
    }

    function makeRequest(url, httpRequest, handler, a, data, method)
    {

        httpRequest.onreadystatechange = function()
        {
            if (httpRequest.readyState == 4) {
                if (httpRequest.status == 200) {
                    if (httpRequest.responseXML) {
                        handler(httpRequest);
                    } else {
                        //alert('Response a empty.');
                    }
                } else {
                    alert('There was a problem with the request.');
                }
            }
        };
        httpRequest.open(method||'GET', url, a||true);
        httpRequest.send(data||null);
    }

    var httpRequest = GetXHR();



    var page = null;
    var hightlightner = null;
    var editor = null;
    var rabbit = null;
    var rabbitUri = 'http://localhost/rabbit.xml';

    function init()
    {
        page = window.document;
        rabbit = page.getElementById('container');
        editor = page.getElementById('editor');
        hightlightner = page.getElementById('hightlightner');
        if (httpRequest) {
            makeRequest(rabbitUri, httpRequest, replaceRabbit);
        }
    }

    function replaceRabbit(httpRequest)
    {
        var parentOldNode = rabbit.parentNode;
        var newContainer = httpRequest.responseXML.getElementById('container');
        AttributeInsertAfter(newContainer, 'onclick', 'mouseClickOnContainer(event);');
        AttributeInsertAfter(newContainer, 'onmousemove', 'mouseMoveOnContainer(event);');
        AttributeInsertAfter(newContainer, 'onmouseover', 'mouseOverOnContainer(event);');
        AttributeInsertAfter(newContainer, 'onmouseout', 'mouseOutOnContainer(event);');
        parentOldNode.replaceChild(XmlDomElement2HtmlDomElement(newContainer), rabbit);
    }

    function mouseClickOnContainer(event)
    {
        return false;
    }

    function mouseMoveOnContainer(event)
    {
        var html = (event.target.nodeName).toLowerCase() + (event.target.id ? '#' + event.target.id : '');
        var parent = null;
        var child = event.target.parentNode;
        while (parent = child.parentNode) {
            if (parent.nodeType==1) {
                html = (parent.nodeName).toLowerCase() + (parent.id ? '#' + parent.id : '') + ' > ' + html;
            }
            child = parent;
        }
        hightlightner.innerHTML = "<code>" + html + "</code>";
        /*hightlightner.style.width = event.target.clientWidth + "px";
        hightlightner.style.height = event.target.clientHeight + "px";
        hightlightner.style.marginLeft = event.target.offsetLeft + "px";
        hightlightner.style.marginTop = event.target.offsetTop + "px";*/
    }

    function mouseOverOnContainer(event)
    {
        //hightlightner.style.display = "block";
    }

    function mouseOutOnContainer(event)
    {
        hightlightner.textContent = '';
        //hightlightner.style.display = "none";
    }

